#ifndef _E_ENTITY_MANAGER_H_
#define _E_ENTITY_MANAGER_H_

#include "EEntity.h"
#include "EGameObject.h"

#include "eH.h"
namespace engine
{
//------------------------------------------------------------
class EEntityGroup : public EGameObject
{
public:
  typedef vector<EEntity*>  EEntityVector;

private:
  EEntityVector           m_vEntities;
  bool                    m_bGameStarted;

public:
  EEntityGroup( EEntity::_eGroupType eType );
  ~EEntityGroup( );
  virtual bool      update( const EGameTime& time );
  virtual bool      startGame();
  virtual bool      updateGame( const EGameTime& time );
  virtual bool      endGame();

  bool              addEntity( EEntity& entity );
  inline EEntityVector::iterator   getIterator() { return m_vEntities.begin(); }
  inline EEntityVector::iterator   getIteratorEnd() { return m_vEntities.end(); }

  const EEntity::_eGroupType        m_eType;
};

//------------------------------------------------------------
class EEntityManager : public EGameObject
{
  vector<EEntityGroup*>  m_vGroups;

  bool                  initGroups();
public:
  EEntityManager();
  ~EEntityManager();
  virtual bool          update      ( const EGameTime& time );
  virtual bool          startGame   ();
  virtual bool          updateGame  ( const EGameTime& time );
  virtual bool          endGame     ();

  bool                  addEntity   ( EEntity::_eGroupType eGroupType, EEntity& entity );
  EEntityGroup&         getEntityGroup    ( EEntity::_eGroupType eGroupType ) const;
};

} // end namespace

#endif